// 登录请求结构
export interface LoginRequest {
  op: string;
  args: Array<{
    apiKey: string;
    passphrase: string;
    timestamp: string;
    sign: string;
  }>;
}

// 登录成功响应
export interface LoginSuccessResponse {
  event: 'login';
  code: string;
  msg: string;
  connId: string;
}

// 错误响应
export interface ErrorResponse {
  event: 'error';
  code: string;
  msg: string;
  connId: string;
}

// 通用WebSocket请求结构
export interface WsRequest<T> {
  op: string; // 操作类型，如 "subscribe", "login", "order"
  args: T[]; // 参数数组
  id?: string; // 请求ID，用于关联请求和响应
}

// 订阅参数
export interface SubscriptionArgs {
  channel: string; // 订阅的频道，如 "account", "books"
  instId?: string; // 实例ID，如 "BTC-USDT"
  ccy?: string; // 币种
  // ... 其他可能的订阅参数
}

// WebSocket响应
export interface WsResponse {
  event?: 'login' | 'error' | 'subscribe' | 'unsubscribe' | 'notice'; // 事件类型
  code?: string;
  msg?: string;
  connId?: string;
  // 以下用于处理订阅数据
  arg?: SubscriptionArgs; // 订阅的参数
  data?: any[]; // 订阅返回的数据
  id?: string; // 响应ID，与请求ID对应
}

// 账户余额请求参数
export interface BalanceRequestParams {
  ccy?: string; // 可选币种，多个用逗号分隔
}

// 账户余额详情
export interface BalanceDetail {
  availBal: string; // 可用余额
  availEq: string; // 可用权益
  cashBal: string; // 现金余额
  ccy: string; // 币种
  eq: string; // 币种权益
  eqUsd: string; // 币种权益估值 (美元)
  frozenBal: string; // 冻结余额
  uTime: string; // 更新时间
}

// 账户余额数据
export interface AccountBalanceData {
  adjEq: string; // 调整后权益
  borrowFroz: string; // 借币冻结
  details: BalanceDetail[];
  totalEq: string; // 总权益
  uTime: string; // 更新时间
}

// 账户余额响应
export interface AccountBalanceResponse {
  arg: SubscriptionArgs;
  data: AccountBalanceData[];
}

// 订单参数
export interface OrderParams {
  instId: string; // 产品ID
  tdMode: string; // 交易模式
  side: string; // 买卖方向
  ordType: string; // 订单类型
  sz: string; // 委托数量
  px?: string; // 委托价格，市价单不传
  ccy?: string; // 保证金币种，仅适用于单币种保证金模式下的全仓杠杆订单
  clOrdId?: string; // 客户自定义订单ID
  tag?: string; // 订单标签
  posSide?: string; // 持仓方向
  reduceOnly?: boolean; // 是否只减仓
  // ... 其他可能的订单参数
}

// 订单响应数据
export interface OrderData {
  ordId: string; // 订单ID
  clOrdId: string; // 客户自定义订单ID
  tag: string; // 订单标签
  sCode: string; // 订单状态码
  sMsg: string; // 订单状态信息
}

// 订单响应
export interface OrderResponse {
  id: string;
  op: string;
  data: OrderData[];
}

// 指数K线数据结构
export interface IndexCandleData {
  ts: string;       // 开始时间，Unix时间戳的毫秒数格式
  o: string;        // 开盘价格
  h: string;        // 最高价格
  l: string;        // 最低价格
  c: string;        // 收盘价格
  confirm: string;  // K线状态，0代表K线未完结，1代表K线已完结
}

// 指数K线数据响应
export interface IndexCandleResponse {
  arg: {
    channel: string;
    instId: string;
  };
  data: [string, string, string, string, string, string][]; // [ts,o,h,l,c,confirm]
}

// 行情Ticker数据结构
export interface TickerData {
  instType: string;    // 产品类型
  instId: string;      // 产品ID
  last: string;        // 最新成交价
  lastSz: string;      // 最新成交的数量
  askPx: string;       // 卖一价
  askSz: string;       // 卖一价对应的量
  bidPx: string;       // 买一价
  bidSz: string;       // 买一价对应的数量
  open24h: string;     // 24小时开盘价
  high24h: string;     // 24小时最高价
  low24h: string;      // 24小时最低价
  volCcy24h: string;   // 24小时成交量，以币为单位
  vol24h: string;      // 24小时成交量，以张为单位
  sodUtc0: string;     // UTC+0 时开盘价
  sodUtc8: string;     // UTC+8 时开盘价
  ts: string;          // 数据产生时间戳
}

// Ticker响应
export interface TickerResponse {
  arg: {
    channel: string;
    instId: string;
  };
  data: TickerData[];
}